package com.dh.leetcode.three;

import org.junit.Assert;
import org.junit.Test;

/**
 * @ClassName: _389_find_the_difference
 * @Description: 389. 找不同
 * 给定两个字符串 s 和 t，它们只包含小写字母。
 * <p>
 * 字符串 t 由字符串 s 随机重排，然后在随机位置添加一个字母。
 * <p>
 * 请找出在 t 中被添加的字母。
 * <p>
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * 输入：s = "abcd", t = "abcde"
 * 输出："e"
 * 解释：'e' 是那个被添加的字母。
 * 示例 2：
 * <p>
 * 输入：s = "", t = "y"
 * 输出："y"
 * 示例 3：
 * <p>
 * 输入：s = "a", t = "aa"
 * 输出："a"
 * 示例 4：
 * <p>
 * 输入：s = "ae", t = "aea"
 * 输出："a"
 * <p>
 * <p>
 * 提示：
 * <p>
 * 0 <= s.length <= 1000
 * t.length == s.length + 1
 * s 和 t 只包含小写字母
 * <p>
 * https://leetcode-cn.com/problems/find-the-difference/
 * @Author: shouzimu
 * @Date: 2020/12/18 8:57
 */
public class _389_find_the_difference {
    /**
     * ac 1ms 100%
     *
     * @param s
     * @param t
     * @return
     */
    public char findTheDifference2(String s, String t) {
        char[] sArray = s.toCharArray();
        char[] tArray = t.toCharArray();
        int length = 26;
        char[] s1 = new char[length];
        char[] s2 = new char[length];
        for (char c : sArray) {
            if (c != '\0') {
                s1[c - 'a']++;
            }
        }
        for (char c : tArray) {
            if (c != '\0') {
                s2[c - 'a']++;
            }
        }
        for (int i = 0; i < length; i++) {
            if (s2[i] != s1[i]) {
                return (char) (i + 'a');
            }
        }
        return '\0';
    }

    /**
     * ac 2ms
     * @param s
     * @param t
     * @return
     */
    public char findTheDifference_v2(String s, String t) {
        char c = '\0';
        int len = s.length();
        for (int i = 0; i < s.length(); i++) {
            c += t.charAt(i);
            c -= s.charAt(i);
        }
        return (char) (c + t.charAt(len));
    }


    /**
     * ac 1ms
     * @param s
     * @param t
     * @return
     */
    public char findTheDifference(String s, String t) {
        char c = '\0';
        char[] sa = s.toCharArray();
        char[] ta = t.toCharArray();
        for (int i = 0; i < sa.length; i++) {
            c += ta[i];
            c -= sa[i];
        }
        return (char) (c + ta[sa.length]);
    }

    @Test
    public void findTheDifferenceTest() {
        Assert.assertEquals('a', findTheDifference("ae", "aea"));
        Assert.assertEquals('a', findTheDifference("a", "aa"));
        Assert.assertEquals('y', findTheDifference("", "y"));
    }
}
